Nextcloud propose une app de Stockage Externe (external storage) prenant en charge différents protocoles ou services. Souhaitant rendre accessible l’un de mes serveurs de fichiers sous Debian via mon Nextcloud les protocoles que j’ai testés sont :
•.SMB/CIFS
•.SFTP
•.Local
Le test a été fait entre un serveur Nextcloud (v18.0.4) situé dans un Datacenter (connexion 1000MB/s) et un serveur Debian sur un site distant relié à internet par une SDSL 4Mb/s
Le test a été réalisé en téléchargeant un fichier de 10Mo (suffisant vu mon débit…) localisé sur le serveur Debian et téléchargé au travers d’un montage dans nextcloud via l’app “External Storage” de Nextcloud.
Schéma architecture
Configuration app Nextcloud External Storage
Deux protocoles ont été testés : SMB (au travers d’un tunnel OpenVPN) et SFTP.
Le montage SFTP donne une vitesse de téléchargement depuis Nextcloud de 80Ko/sec au maximum.
Le montage SMB donne une vitesse de téléchargement depuis Nextcloud de 350Ko/sec au maximum.
Il y a visiblement un problème sur la librairie PHP utilisée pour communiquer avec SFTP, car cette lenteur n’est pas constatée en passant par un client Filezilla par exemple ! Après quelques recherches sur le web, je ne suis pas le seul à l’avoir constaté.
Concennant le protocole SMB, ce n’est vraiment pas optimal, le débit est meilleur mais le téléchargement se fait en saccades et la navigation dans les dossiers n’est pas instantanée, il est même souvent nécessaire de cliquer plusieurs fois sur un dossier pour en afficher le contenu, qui apparaît souvent vide au premier clic, et ce problème d’actualisation/rafraîchissement est également présent en SFTP.
Si vous avez une ligne internet un peu faible comme moi, je vous déconseille l’usage des ces deux protocoles ou alors en dernier recours.
Le dernier stockage externe testé est le montage “local”. Le montage local vous rend libre d’utiliser la protocole que vous souhaitez.
Je me suis arrêté sur SSHFS, la raison de ce choix est :
1 seul paquet à installer
Protocole SSH donc chiffré, ne nécessitant pas de passer le traffic dans un VPN
Protocole connu et éprouvé
Fonctionnement clé publique/privée
1 seul port à ouvrir
Attention cependant, il ne fut pas si simple de rendre le montage local SSHFS accessible à Nextcloud. En effet votre Nextcloud est exéctué avec des droits spécifiques (ex : www-data…), vous devrez donc indiquer l’UID et le GID correspondant :
sshfs -o uid=XXXX -o gid=XXXX
Par défaut, SSHFS n’autorise pas les utilisateurs autres, que celui qui a effectué le point de montage, à accéder à ce dernier. Vous devez donc impérativement utiliser l’option “allow_other”, si vous montez le système de fichier avec l’utilisateur “root” et que vous souhaitez y accéder avec l’utilisateur www-data par exemple, sinon vous aurez une erreur du type :
impossible d'accéder à '/POINT-DE-MONTAGE/': Permission non accordée
Dans Nextcloud cette erreur de permission générera une erreur PHP de type :
stat(): stat failed for
Si vous montez le répertoire SSHFS avec un autre utilisateur que “root” et que vous souhaitez qd même utiliser l’option “allow_other”, il faudra alors modifier le fichier /etc/fuse.conf :
# Décommentez cette ligne
user_allow_other
La commande de montage ressemblera donc in fine à :
sshfs -o uid=1022 -o gid=1001 -o allow_other user@serveur:/REPDISTANT/ /REPLOCAL
Le résultat est SANS APPEL !! La navigation dans les fichiers est parfaitement fluide (avec une simple SDSL 4Mb !), le téléchargement est tout aussi fluide et atteint plus de 420Ko/sec !!! Du coup c’est pour moi la meilleure solution si vous souhaitez connecter un serveur quelconque à votre Nextcloud.
Attention, n’oubliez pas que dans le cadre d’un stockage externe Nextcloud, votre Nextcloud ne fait que faire la passerelle entre vous et le serveur, votre débit sera donc limité par la vitesse d’upload/download du serveur sur lequel se trouvent physiquement les données.
Enfin, notez que vous pouvez créer des liens de partages même sur un stockage externe ! Nextcloud is amazing :)
NOTE de fin : Le dépôt de fichier n’a pas été étudié dans cet exemple, mais on peut vraisemblablement estimer que les écarts entre les protocoles seront les mêmes. Il y a un problème sur la librairie PHP utilisée pour communiquer avec SFTP car cette lenteur n’est pas constatée en passant par un client Filezilla par exemple.
NOTE 2 : LIMITE : si le partage SSHFS est cassé ou temporairement inacessible, le stockage local est “vide” sur Nextcloud. Il ne semble pas se rafraîchir. Si on le recrée, cela brise les eventuels liens publics créés… je cherche actuellement une solution à cette limite et je viendrai poster ici si je trouve !
Merci à Damien pour avoir mener des tests en parallèle sur MyTinyDC, notamment avec un montage NFS, qui a pu confirmer tous mes essais et notamment les performances SFTP. Merci à la commu Nextcloud !